package com.gengzp.mq.client.utils;

import com.gengzp.mq.client.core.MqCoreFunc;
import com.gengzp.mq.client.enums.MqMessageStatusEnum;
import com.gengzp.mq.client.model.generic.MqPaginationResult;
import com.gengzp.mq.client.model.message.MqPageMessageResp;
import com.gengzp.mq.client.model.topic.MqTopicResp;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @ClassName MqMessageUtils
 * @Description mq消息工具类
 * @Author gengzp
 * @Date 2025/9/4 20:54
 */
@Component
public class MqMessageUtils {

    private static MqCoreFunc mqCoreFunc;

    private MqMessageUtils(MqCoreFunc mqCoreFunc) {
        MqMessageUtils.mqCoreFunc = mqCoreFunc;
    }

    /**
     * 创建主题 topic
     *
     * @param topicName   主题名
     * @param description 主题描述
     */
    public static void createTopic(String topicName, String description) {
        mqCoreFunc.createTopic(topicName, description);
    }

    /**
     * 编辑主题描述
     *
     * @param topicName   主题名
     * @param description 主题描述
     */
    public static void editTopicDescription(String topicName, String description) {
        mqCoreFunc.editTopicDescription(topicName, description);
    }

    /**
     * 删除主题
     *
     * @param topicName 主题名
     */
    public static void removeTopic(String topicName) {
        mqCoreFunc.removeTopic(topicName);
    }

    /**
     * 查询全部主题列表
     *
     * @return 主题列表
     */
    public static List<MqTopicResp> searchAllTopic() {
        return mqCoreFunc.searchAllTopic();
    }

    /**
     * 发送消息
     *
     * @param topic   主题
     * @param content 消息内容
     * @return 消息id
     */
    public static String sendMessage(String topic, String content) {
        return sendMessage(topic, "", content);
    }

    /**
     * 发送消息
     *
     * @param topic   主题
     * @param tag     标签
     * @param content 消息内容
     * @return 消息id
     */
    public static String sendMessage(String topic, String tag, String content) {
        return mqCoreFunc.sendMessage(topic, tag, content);
    }

    /**
     * 重发消息
     *
     * @param messageId 消息唯一标识
     */
    public static void resendMessage(String messageId) {
        mqCoreFunc.resendMessage(messageId);
    }

    /**
     * 分页查询消息
     *
     * @param pageNum           页码
     * @param pageSize          每页数据条数
     * @param messageId         消息id
     * @param topic             主题
     * @param messageStatusEnum 消息状态枚举
     * @return 分页查询结果
     */
    public static MqPaginationResult<MqPageMessageResp> pageQueryMessage(int pageNum,
                                                                         int pageSize,
                                                                         String messageId,
                                                                         String topic,
                                                                         MqMessageStatusEnum messageStatusEnum) {
        return mqCoreFunc.pageQueryMessage(pageNum, pageSize, messageId, topic, messageStatusEnum);
    }

}
